跨域
const app = await NestFactory.create(AppModule)
const origins = JSON.parse(process.env.LSC_CORS_ORIGIN)
//["http://localhost:8080","http://localhost:8081"]
app.enableCors({
"origin": origins,
// "origin": "*",
"credentials": true,
// "allowedHeaders":['Authorization','content-type'],
"methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"preflightContinue": false,
"optionsSuccessStatus": 204
})//https://github.com/expressjs/cors#configuration-options
全局异常处理
可以捕获全局异常并且进行日志等相关记录
//HttpException 类型
import { ExceptionFilter, Catch, ArgumentsHost, HttpException,HttpStatus } from '@nestjs/common';
import { Request, Response } from 'express';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const status = exception.getStatus();
// @TODO 记录日志
console.log('全局 HttpException 异常日志: %s %s error: %s', requesthod, request.url, exception.message);
// 发送响应
response
.status(status)
.json({
statusCode: status,
message: exception.message,
timestamp: new Date().getTime(),
path: request.url,
});
}
}
//不分异常类型
import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
HttpStatus,
} from '@nestjs/common'
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
const ctx = host.switchToHttp()
const response = ctx.getResponse()
const request = ctx.getRequest()
const status =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR
const exceptionStr = exception ? `message:${exception['message']},stack:${exception['stack']}` : ''
console.log('全局异常日志: %s %s %s error: %s', requesthod, request.url, request.body, exceptionStr)
response.status(status).json({
statusCode: status,
timestamp: new Date().getTime(),
message: exception['message'],
method: requesthod,
path: request.url,
})
}
}
//设置为全局异常
app.useGlobalFilters(new HttpExceptionFilter(),new AllExceptionsFilter())
//https://docs.nestjs.cn/7/exceptionfilters
限速
保护node程序免受暴力攻击
$ npm i --save express-rate-limit
app.use(
rateLimit({
windowMs: 15 * 60 * 1000, // 15分钟
max: 1000, // 限制15分钟内最多只能访问1000次
}),
)
|